#ifndef __LINKSTACK_H_
#define __LINKSTACK_H_

#include "LinkList.hpp"
//模板类派生模板类
template<typename T>
class LinkStack//:protected LinkList<T>
{
public:
    LinkStack(){}
    void Push(const T& element);
    void Pop();
    bool Empty();
    T& GetTop();
private:
    LinkList<T> list;//组合:具有更好的封装性
};


template <typename T>
inline void LinkStack<T>::Push(const T &element)
{
    list.InsertTail(element);
}

template <typename T>
inline void LinkStack<T>::Pop()
{
    list.RemoveByIndex(list.Size() - 1);
}

template <typename T>
inline bool LinkStack<T>::Empty()
{
    return list.Size();
}

template <typename T>
inline T &LinkStack<T>::GetTop()
{
    return list.FindByIndex(list.Size() - 1);
}

#endif


